
// 此模块：创建axios实例，并做全局性的处理（如：baseUrl，请求和响应拦截器）
import axios from 'axios';
import store from "@/store";


// 创建axios实例。用aixos实例而不使用axios本身，能够防止全局污染。
const service = axios.create({
    baseURL:"http://121.89.205.189:3000/admin",
    timeout:5000,

})


// 请求拦截器：
// 1）解释：主要是个回调函数，这个回调函数是在所有请求到达后端前执行（或者说，只要发送请求，先调用该函数）。
// 2）、回调函数的参数config：请求的配置

// 可以做什么：所有请求的公共业务,如：携带token。针对某种请求方式的公共参数等等。
service.interceptors.request.use((config)=>{
    store.commit("showLoading");
    
    const token = sessionStorage.getItem("token");
    if(token){
        config.headers.token = token;
    }

    // if(config.method === "post"){
    //     config.data = {
    //         ...config.data,
    //         userid:sessionStorage.getItem("userid")
    //     }
    // }

    return config;
})


// 响应拦截器:
// 1)、解释：主要是个回调函数，这个回调函数是在后端响应回来，先调用该函数，再到发请求代码的 .then() .catch()。
// 2)、回调函数的参数：
//      res：后端响应的对象。

// 3）、使用：
//     第一个回调函数：如，针对不同的响应状态码，做公共业务

service.interceptors.response.use((res)=>{
    store.commit("hideLoading");

    // loading.close();
    if(res.status==="200"){
        // ???
    }
    return res;
},(error)=>{
    console.log("error");
    // 针对不同错误也可以做不同的处理
    // 如：状态码是500，做对应的处理。
    
})

export default service;
